'\" t
.\" Copyright (c) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.TH bsd_signal 3 2024-05-02 "Linux man-pages 6.9.1"
.SH NAME
bsd_signal \- signal handling with BSD semantics
.SH LIBRARY
Standard C library
.RI ( libc ", " \-lc )
.SH SYNOPSIS
.nf
.B #include <signal.h>
.P
.B typedef void (*sighandler_t)(int);
.P
.BI "sighandler_t bsd_signal(int " signum ", sighandler_t " handler );
.fi
.P
.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.RE
.P
.BR bsd_signal ():
.nf
    Since glibc 2.26:
        _XOPEN_SOURCE >= 500
.\"    || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
            && ! (_POSIX_C_SOURCE >= 200809L)
    glibc 2.25 and earlier:
        _XOPEN_SOURCE
.fi
.SH DESCRIPTION
The
.BR bsd_signal ()
function takes the same arguments, and performs the same task, as
.BR signal (2).
.P
The difference between the two is that
.BR bsd_signal ()
is guaranteed to provide reliable signal semantics, that is:
a) the disposition of the signal is not reset to the default
when the handler is invoked;
b) delivery of further instances of the signal is blocked while
the signal handler is executing; and
c) if the handler interrupts a blocking system call,
then the system call is automatically restarted.
A portable application cannot rely on
.BR signal (2)
to provide these guarantees.
.SH RETURN VALUE
The
.BR bsd_signal ()
function returns the previous value of the signal handler, or
.B SIG_ERR
on error.
.SH ERRORS
As for
.BR signal (2).
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.na
.nh
.BR bsd_signal ()
T}	Thread safety	MT-Safe
.TE
.SH VERSIONS
Use of
.BR bsd_signal ()
should be avoided; use
.BR sigaction (2)
instead.
.P
On modern Linux systems,
.BR bsd_signal ()
and
.BR signal (2)
are equivalent.
But on older systems,
.BR signal (2)
provided unreliable signal semantics; see
.BR signal (2)
for details.
.P
The use of
.I sighandler_t
is a GNU extension;
this type is defined only if the
.B _GNU_SOURCE
feature test macro is defined.
.SH STANDARDS
None.
.SH HISTORY
4.2BSD, POSIX.1-2001.
Removed in POSIX.1-2008,
recommending the use of
.BR sigaction (2)
instead.
.SH SEE ALSO
.BR sigaction (2),
.BR signal (2),
.BR sysv_signal (3),
.BR signal (7)
